//package com.example.demosdk;
//
//
//import com.sun.jna.*;
//import com.sun.jna.Native;
//import com.sun.jna.platform.win32.WinDef;
//import org.junit.jupiter.api.Test;
//import com.sun.jna.Structure;
//import com.sun.jna.platform.win32.WinDef.HWND;
//
//import java.util.Arrays;
//import java.util.List;
//
//public class getTemperature {
//    public interface DemoLibrary extends Library{
//        DemoLibrary INSTANCE = Native.load("static/DLSDK/DMSDK",DemoLibrary.class);
//        DemoLibrary INSTANCE2 = Native.load("static/Demo/InfraredSDK",DemoLibrary.class);
//        Pointer DM_Init();
//        //      引入的窗口句柄属性和*ip属性,const是对ip这一值进行限定，当创建之后，就不能进行改变，char *IPAddr是指合法规定的ipv4地址
////      const char* 对应string，hwnd是一个带有int类型的结构体指针,先把它当作一个lang型,这里就需要java与c++里面的数据类型进行对应了
//        /* 结构体B定义 */
//
//
//        int DM_Connect(HWND hwnd,String IPAddr,int Port);
//        int DM_CheckOnline(String IPAddr,int Port);
//
//        //        这里应该要添加数据格式
//        int DM_SetArea(int handle, int iArea, int x1, int y1, int x2, int y2, int Emiss, int MeasureType);
//        int DM_GetTemp (int handle,int Mode );
//        int DM_Disconnect(HWND handle);
//        int DM_SetSpot(int handle,int iPoint,int x,int y,int Emiss);
//        int DM_GetSpotTemp(int handle,int SpotID,int Mode);
//        int DM_GetAreaTemp(int handle,int AreaID,int Mode);
////        void DM_SetAllMessCallBack(void (CALLBACK *fMessCallBack)( int msg, char *pBuf, int dwBufLen));
////        设置仪器测温结果的返回速度
//       	int DM_SetUpdateMeaTemp(int handle, int Freq );
////        获取仪器测温结果的返回速度
//        int DM_GetUpdateMeaTemp(int handle);
//
////        从内存文件中加载参数，INT8U对应56字节的存储区
//        int IFR_LoadInfraredParamFromStream(int hHandle,Structure pBuf);
////        写入pbuf之后，再创建回调函数，
////        void DM_SetAllMessCallBack(void CALLBACK *fMessCallBack(int msg,String pBuf, int dwBufLen));
//
//        public class tagTemperature extends Structure{
//            public int type;
//            public int number;
//            public int temper;
//            //3:这个地方具体原理不知道，只知道声明之后，当前结构体可以按照引用或者值取值
//
//            public  class ByReference extends tagTemperature implements Structure.ByReference {}
//            public  class ByValue extends tagTemperature implements Structure.ByValue{}
//            //4:这个地方表示当前结构体是内存对齐的，因为c/c++ 的结构体成员多数情况是内存对齐，
//            //可以想象如果c/c++内存对齐，而java没有内存对齐，那取出来的值肯定也对不上
//            @Override
//            protected List<String> getFieldOrder() {
//                return Arrays.asList(new String[] { "type", "number", "temper"});
//            }
////        public tagTemperature(){
////
////        }
//        }
//        /*Structure 类有两个内部接口Structure.ByReference 和Structure.ByValue。这两个接口仅仅是标记，如果一个类实现Structure.ByReference 接口，就表示这个类代表结构体指针。
//        如果一个类实现Structure.ByValue 接口，就表示这个类代表结构体本身*/
//        public class tagTempMessage extends Structure{
//            public int handle;
//            public int len;
//            public byte[] dvrIp = new byte[16];
//            //     public tagTemperature[] temperInfo = new tagTemperature[32] ;
//            public tagTemperature.ByValue[] temperInfo = new tagTemperature.ByValue[32];
//            public  class ByReference extends tagTempMessage implements Structure.ByReference {}
//            public  class ByValue extends tagTempMessage implements Structure.ByValue{}
//            @Override
//            protected List<String> getFieldOrder() {
//                return Arrays.asList(new String[] { "handle", "len", "dvrIp","temperInfo"});
//            }
//        }
//    }
//
//
//
//    //    struct tagTemperature
////    {
////        int type;   //类型
////        int number;  //编号
////        int temper;   //温度
////    };
////    typedef struct tagTempMessage
////    {
////        int handle;
////        int len;//temperInfo的个数
////        char dvrIP[16];
////        tagTemperature  temperInfo[32];
////    }_tagTempMessage;
////struct tagTempHandle
////    {
////        int handle;  	/句柄
////        int len;		//有几组温度数据
////    };
////struct HWND{
////        int unused ;
////    };
//    @Test
//    public void testTemper(){
////        NativeLong myHwnd = null;
////        int myHwnd=0;
//        WinDef.HWND myHwnd = new WinDef.HWND();
////        int temHandle = 0;
//        int resultSet = 0;
//        int resultGet = 0;
////        String temBuff = "";
////        Pointer temBuff = new Memory(50);
////        UserStruct.ByReference pUserStruct=new UserStruct.ByReference();
////        tagTemperature.ByValue[] temperInfo = new tagTemperature.ByValue[32];
////        tagTempMessage temBuff = new tagTempMessage();
//
////        这里实例化的错误
//
//
//        String cameraIp = "192.168.1.21";
//        DemoLibrary.INSTANCE.DM_Init();
//        int resultCheck = DemoLibrary.INSTANCE.DM_CheckOnline(cameraIp,8000);
//        if (resultCheck > 0){
//            System.out.println("设备在线");
//        }else {System.out.println("不在线");}
//        int temHandle = DemoLibrary.INSTANCE.DM_Connect(myHwnd,cameraIp,8000);
//        if (temHandle > 0){
//            System.out.println("连接成功");
//        }else {
//            System.out.println("连接失败");
//        }
//
////        System.out.println(resultConnect);
//        resultSet = DemoLibrary.INSTANCE.DM_SetArea(temHandle,1,30,30,60,60,10,2);
////        resultSet = DemoLibrary.INSTANCE.DM_SetSpot(temHandle,5, 200, 100,10);
//        System.out.println("设置区域结果>0成功："+resultSet);
////        DemoLibrary.INSTANCE.DM_SetUpdateMeaTemp(temHandle,2);
////        int suResult = DemoLibrary.INSTANCE.DM_GetUpdateMeaTemp(temHandle);
////        System.out.println("测温结果返回速度："+suResult);
//        resultGet = DemoLibrary.INSTANCE.DM_GetAreaTemp(temHandle,1, 1);
//        System.out.println("获得测温结果函数>0成功:"+resultGet);
////      将tempHandle数据写入temBuff中
//        int loadResult = DemoLibrary.INSTANCE2.IFR_LoadInfraredParamFromStream(temHandle,temBuff);
////        手动释放内存，避免memory对象重复执行free方法
////        Native.free(Pointer.nativeValue(temBuff));
////        Pointer.nativeValue(temBuff,0);
//        System.out.println("从内存文件中加载参数>=0成功:"+loadResult);
//        DemoLibrary.INSTANCE.DM_Disconnect(myHwnd);
//
//    }
//
//
//}
//
//
/**
 * 这部分是DLFrame从内存读取，然后直接获得温度（死
 */
//        int loadBuffHandle =  dlFrameSDK.IFR_LoadBuffer(connectHandle,temBuff,100);
//        float resultTemper = dlFrameSDK.IFR_GetPointTemp(loadBuffHandle,point2);
//        System.out.println(resultTemper);
//        int loadHandle = dlFrameSDK.IFR_LoadFile(myHwnd,savePath,0,0,2);
//        System.out.println(loadHandle);
//        int captureResult = dlSdk.DM_CaptureInfraredFrame(connectHandle,savePath,2,20);
//        System.out.println(captureResult);
//        Pointer pBuff = new Memory(1024*1024*4);
//        int ifrHandle = dlFrameSDK.IFR_LoadBuffer(null,pBuff,1024*1024*4);
//        System.out.println("从内存中加载红外文件："+ifrHandle);
//        int stopCaptureResult = dlSdk.DM_StopRecvInfraredData(exHandle);
//        System.out.println("停止红外数据的返回结果："+stopCaptureResult);
//        int loadResult =  dlFrameSDK.IFR_LoadInfraredParamFromStream(temHandle,temBuff);
//        System.out.println(loadResult);
//        if(loadResult>=0){System.out.println("从内存返回数据成功");}
//        InfraDataCallBackDll callback2 = new InfraDataCallBackImpl();
//        dlSdk.DM_SetAllMessCallBack(callback2);

/**
 * 获得图像的宽高
 */
//        IntByReference nWidth  = new IntByReference();
//        IntByReference nHeight = new IntByReference();
//        int getWidthResult = dlFrameSDK.IFR_GetImageWidthHeight(connectHandle,nWidth,nHeight);
//        System.out.println(getWidthResult);


//        int DM_CaptureInfraredFrame(int handle, String Path, int Frame, int Time);

//        long exLongHandle = (int) connectHandle;
//        long dataType = 1;   //1表示 INFRA_DATA
